import torch
from torch import nn

"""
nn.RNN中的参数说明：
input_size: vocab_size(词元的维度大小，也可以说是词的分类大小)
hidden_size: RNN隐藏状态的维度大小
num_layers=1 : RNN隐藏状态层的深度
nonlinearity='tanh' : RNN隐藏状态的激活函数（'relu'）
bias=True : 是否启用偏置
batch_first=False # inputs输入是否以batch_size为第一维度 (batch_size,seq_len,vocab_size)
dropout=0.0 : 暂退法，防止过拟合
bidirectional=False ：是否启用双向RNN结构（切记双向RNN与单向RNN解决问题是不同的）
device=None : 模型运行的设备
dtype=None : 模型输出值的类型
"""

# RNN 模型
rnn = nn.RNN(10, 20, 1)  # (vocab_size,hidden_size,num_layers)
input = torch.randn(5, 3, 10)  # (seq_len,batch_size,vocab_size)
h0 = torch.randn(1, 3, 20)  # (num_layers,batch_size,hidden_size)
output, hn = rnn(input, h0)
print(output.shape, hn.shape)
# 根据上述的打印打印结果可得，output的输出结果为 torch.Size([5, 3, 20])
# (5, 3, 20) == (seq_len,batch_size,hidden_size):
# 上述API 并没有做预测
